package com.star.util;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @Classname ImgUtil
 * @Author Star
 * @Date 2021/4/15 - 10:06
 * @Description 图片工具类
 */
public class ImgUtil {
    //获取当前资源路径
    private static String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
    //获取当前时间精确到秒
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    //获取当前随机数
    private static final Random r = new Random();
    /**
     * 处理用户传进来的图片
     * @param thumbnail spring自带文件类
     * @param targetAddr 图片存放地址
     * @return 返回相对路径
     */
    public static String generateNormalImg(MultipartFile thumbnail, String targetAddr){
        //获取文件随机名
        String realFileName = getRandFileName();
        //获取文件扩展名 随机名和扩展名构建出文件名字
        String extension = getFileExtension(thumbnail);
        //创建文件
        makeDirPath(targetAddr);
        //相对路径
        String relativeAddr = targetAddr + realFileName + extension;
        //创建文件
        File dest = new File(PathUtil.getImgBase()+relativeAddr);
        try {
            Thumbnails.of(thumbnail.getInputStream())
                    .size(200, 200)//图片大小
                    .watermark(Positions.BOTTOM_RIGHT,//水印位置
                    ImageIO.read(new File(basePath + "/星速.png")), 0.3f)//设置水印透明度
                    .outputQuality(0.8f)//压缩质量
                    .toFile(dest);//存放路径
        }catch (Exception e){
            throw new RuntimeException("创建缩略图失败：" + e.toString());
        }
        return relativeAddr;
    }

    /**
     * 创建目标路径所涉及的目录
     * @param targetAddr 创建的目录 相对路径
     */
    private static void makeDirPath(String targetAddr) {
        //目录全路径
       String realFileParenPath = PathUtil.getImgBase()+targetAddr;
       File dirPath = new File(realFileParenPath);
       if (!dirPath.exists()){
           dirPath.mkdirs();
       }
    }
    /**
     * 获取输入文件的扩展名
     * @param cFile
     * @return
     */
    private static String getFileExtension(MultipartFile cFile) {
        //获取全部名
        String originalFileName = cFile.getOriginalFilename();
        return originalFileName.substring(originalFileName.lastIndexOf("."));
    }

    /**
     * 生成随机文件名 当前年月日 小时分钟秒钟 + 五位随机数
     * @return
     */
    private static String getRandFileName() {
        //获取随机五位数 10000-99999
        int random = r.nextInt(89999)+10000;
        String nowTimeStr = dateFormat.format(new Date());
        return nowTimeStr+random;
    }

    public static void main(String[] args) throws IOException {
        //获取当前资源路径
        String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
        System.out.println(basePath);
        //基础图片
        Thumbnails.of(new File("F:\\笔记\\美味图片.jpeg"))
                .size(200, 200).watermark(Positions.BOTTOM_RIGHT,//水印位置
                ImageIO.read(new File(basePath + "/星速白.png")), 0.3f).outputQuality(0.8f)//设置水印透明度和质量
                .toFile("F:/笔记/xing.jpg");
    }

}
